package web.suzy.oj.controller.admin;

import cn.hutool.json.JSONObject;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import web.suzy.oj.common.result.ResultBean;
import web.suzy.oj.pojo.dto.DBAndRedisConfigDTO;
import web.suzy.oj.pojo.dto.EmailConfigDTO;
import web.suzy.oj.pojo.dto.TestEmailDTO;
import web.suzy.oj.pojo.dto.WebConfigDTO;
import web.suzy.oj.service.admin.system.ConfigService;

import java.util.ArrayList;
import java.util.List;

/**
 * YangSuzy 软件工作室
 * 类名: ConfigController
 * 描述: ---- 待定 -----
 * 功能: ---- 待定 -----
 *
 * @author YangSuzy
 * Date: 2022/11/29 14:18
 */
@RestController
@RequestMapping("/api/admin/config")
public class ConfigController {
    @Autowired
    private ConfigService configService;

    /**
     * 方法名: getServiceInfo
     * 描述: 获取当前服务的相关信息，获取当前系统的cpu情况，内存使用情况
     *
     * @return web.suzy.oj.common.result.ResultBean<cn.hutool.json.JSONObject>
     * @date 2022/11/29 14:19
     * @auther YangSuzy
     **/
    @RequiresRoles(value = {"root", "admin", "problem_admin"}, logical = Logical.OR)
    @RequestMapping("/get-service-info")
    public ResultBean<JSONObject> getServiceInfo() {
        return configService.getServiceInfo();
    }

    /**
     * 方法名: getJudgeServiceInfo
     * 描述: 获取评测机服务的相关信息
     *
     * @return web.suzy.oj.common.result.ResultBean<java.util.List < cn.hutool.json.JSONObject>>
     * @date 2022/12/6 13:51
     * @auther YangSuzy
     **/
    @RequiresRoles(value = {"root", "admin", "problem_admin"}, logical = Logical.OR)
    @RequestMapping("/get-judge-service-info")
    public ResultBean<List<JSONObject>> getJudgeServiceInfo() {
        return ResultBean.successResponse(new ArrayList<>());
    }

    /**
     * 方法名: getWebConfig
     * 描述: 获取网站基本配置信息
     *
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.dto.WebConfigDTO>
     * @date 2022/11/29 14:39
     * @auther YangSuzy
     **/
    @RequiresPermissions("system_info_admin")
    @RequestMapping("/get-web-config")
    public ResultBean<WebConfigDTO> getWebConfig() {
        return configService.getWebConfig();
    }

    /**
     * 方法名: setWebConfig
     * 描述: 设置网站基本配置信息
     *
     * @param config 配置信息
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/29 14:58
     * @auther YangSuzy
     **/
    @RequiresPermissions("system_info_admin")
    @RequestMapping(value = "/set-web-config", method = RequestMethod.PUT)
    public ResultBean<Void> setWebConfig(@RequestBody WebConfigDTO config) {
        return configService.setWebConfig(config);
    }

    /**
     * 方法名: getEmailConfig
     * 描述: 获取邮箱配置信息
     *
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.dto.EmailConfigDTO>
     * @date 2022/11/29 15:01
     * @auther YangSuzy
     **/
    @RequiresPermissions("system_info_admin")
    @RequestMapping("/get-email-config")
    public ResultBean<EmailConfigDTO> getEmailConfig() {
        return configService.getEmailConfig();
    }

    /**
     * 方法名: setEmailConfig
     * 描述: 设置邮箱配置信息
     *
     * @param config 配置信息
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/29 15:06
     * @auther YangSuzy
     **/
    @RequiresPermissions("system_info_admin")
    @PutMapping("/set-email-config")
    public ResultBean<Void> setEmailConfig(@RequestBody EmailConfigDTO config) {
        return configService.setEmailConfig(config);
    }

    /**
     * 方法名: testEmail
     * 描述: 测试发送邮件功能
     *
     * @param testEmailDto 测试邮箱
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/29 15:11
     * @auther YangSuzy
     **/
    @RequiresPermissions("system_info_admin")
    @PostMapping("/test-email")
    public ResultBean<Void> testEmail(@RequestBody TestEmailDTO testEmailDto) {
        return configService.testEmail(testEmailDto);
    }

    /**
     * 方法名: getDBAndRedisConfig
     * 描述: 获取数据库和 Redis的配置
     *
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.dto.DBAndRedisConfigDTO>
     * @date 2022/11/29 21:48
     * @auther YangSuzy
     **/
    @RequiresPermissions("system_info_admin")
    @RequestMapping("/get-db-and-redis-config")
    public ResultBean<DBAndRedisConfigDTO> getDBAndRedisConfig() {
        return configService.getDBAndRedisConfig();
    }

    /**
     * 方法名: setDBAndRedisConfig
     * 描述: 设置数据库和 Redis的配置
     *
     * @param config 配置信息
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/30 9:06
     * @auther YangSuzy
     **/
    @RequiresPermissions("system_info_admin")
    @PutMapping("/set-db-and-redis-config")
    public ResultBean<Void> setDBAndRedisConfig(@RequestBody DBAndRedisConfigDTO config) {
        return configService.setDBAndRedisConfig(config);
    }

    /**
     * 方法名: deleteHomeCarousel
     * 描述: 删除主页轮播图文件
     *
     * @param id 图片文件ID
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/30 10:42
     * @auther YangSuzy
     **/
    @RequiresPermissions("system_info_admin")
    @DeleteMapping("/home-carousel")
    public ResultBean<Void> deleteHomeCarousel(@RequestParam("id") Long id) {
        return configService.deleteHomeCarousel(id);
    }
}
